/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

include protocol PGMPContent;
include GMPTypes;

using GMPVideoCodec from "gmp-video-codec.h";
using GMPVideoFrameType from "gmp-video-frame-encoded.h";
using GMPErr from "gmp-errors.h";

include "GMPMessageUtils.h";

namespace mozilla {
namespace gmp {

intr protocol PGMPVideoEncoder
{
  manager PGMPContent;
child:
  async InitEncode(GMPVideoCodec aCodecSettings,
                   uint8_t[] aCodecSpecific,
                   int32_t aNumberOfCores,
                   uint32_t aMaxPayloadSize);
  async Encode(GMPVideoi420FrameData aInputFrame,
               uint8_t[] aCodecSpecificInfo,
               GMPVideoFrameType[] aFrameTypes);
  async SetChannelParameters(uint32_t aPacketLoss, uint32_t aRTT);
  async SetRates(uint32_t aNewBitRate, uint32_t aFrameRate);
  async SetPeriodicKeyFrames(bool aEnable);
  async EncodingComplete();
  async ChildShmemForPool(Shmem aEncodedBuffer);

parent:
  async __delete__();
  async Encoded(GMPVideoEncodedFrameData aEncodedFrame,
                uint8_t[] aCodecSpecificInfo);
  async Error(GMPErr aErr);
  async Shutdown();
  async ParentShmemForPool(Shmem aFrameBuffer);
  // MUST be intr - if sync and we create a new Shmem, when the returned
  // Shmem is received in the Child it will fail to Deserialize
  intr NeedShmem(uint32_t aEncodedBufferSize) returns (Shmem aMem);
};

} // namespace gmp
} // namespace mozilla
